package com.jack.leetcode.每日一题;

/*** 
 * @author zhangjie
 * @date 2020/4/2 21:23
 */
public class 生命游戏 {

    public static void main(String[] args) {

    }

    public void gameOfLife(int[][] board) {
        int k = board.length;
        int l = board[0].length;
        int[] x = {-1, 0, 1,-1,1,-1,0,1};
        int[] y = {-1,-1,-1, 0,0, 1,1,1};
        for(int i = 0;i<k;i++){
            for(int j = 0;j<l;j++){
                int count = 0;
                for(int m = 0;m<8;m++){
                    int nx = i+x[m];
                    int ny = j+y[m];
                    if(nx >= 0 && nx < k && ny >= 0 && ny < l){
                        count+=(board[nx][ny]&1);
                    }
                }
                if(count == 3 && board[i][j] == 0){
                    board[i][j] |= 2;
                }
                if((count == 2||count == 3)&&board[i][j] == 1){
                    board[i][j] |= 2;
                }
            }
        }
        for(int i = 0;i<k;i++){
            for(int j = 0;j<l;j++){
                board[i][j] >>=1;
            }
        }
    }


//    public void gameOfLife(int[][] board) {
//        int[][] a = new int[board.length][board[0].length];
//        for(int i = 0;i<board.length;i++){
//            for(int j = 0;j<board[0].length;j++){
//                a[i][j] = shouldLive(i,j,board);
//            }
//        }
//        for(int i = 0;i<board.length;i++){
//            for(int j = 0;j<board[0].length;j++){
//                board[i][j] = a[i][j];
//            }
//        }
//    }
//
//    public int shouldLive(int i,int j,int[][] board){
//        int k = board.length;
//        int l = board[0].length;
//        int[] x = {-1, 0, 1,-1,1,-1,0,1};
//        int[] y = {-1,-1,-1, 0,0, 1,1,1};
//        int count = 0;
//        for(int m = 0;m<8;m++){
//            if(i+x[m] >= 0 && i+x[m] < k && j+y[m] >= 0 && j+y[m] < l){
//                count+=board[i+x[m]][j+y[m]];
//            }
//        }
//        if(count == 3 && board[i][j] == 0){
//            return 1;
//        }
//        if((count == 2||count == 3)&&board[i][j] == 1){
//            return 1;
//        }
//        return 0;
//    }
}
